package com.ruoyi.category.service;

import java.util.List;

import com.ruoyi.category.domain.CategoryWithProductsDTO;
import com.ruoyi.category.domain.GoodsCategory;

/**
 * 商品分类信息Service接口
 * 
 * @author ruoyi
 * @date 2025-06-01
 */
public interface IGoodsCategoryService 
{
    /**
     * 查询商品分类信息
     * 
     * @param categoryId 商品分类信息主键
     * @return 商品分类信息
     */
    public GoodsCategory selectGoodsCategoryByCategoryId(Long categoryId);

    /**
     * 查询商品分类信息列表
     * 
     * @param goodsCategory 商品分类信息
     * @return 商品分类信息集合
     */
    public List<GoodsCategory> selectGoodsCategoryList(GoodsCategory goodsCategory);

    /**
     * 新增商品分类信息
     * 
     * @param goodsCategory 商品分类信息
     * @return 结果
     */
    public int insertGoodsCategory(GoodsCategory goodsCategory);

    /**
     * 修改商品分类信息
     * 
     * @param goodsCategory 商品分类信息
     * @return 结果
     */
    public int updateGoodsCategory(GoodsCategory goodsCategory);

    /**
     * 批量删除商品分类信息
     * 
     * @param categoryIds 需要删除的商品分类信息主键集合
     * @return 结果
     */
    public int deleteGoodsCategoryByCategoryIds(Long[] categoryIds);

    /**
     * 删除商品分类信息信息
     * 
     * @param categoryId 商品分类信息主键
     * @return 结果
     */
    public int deleteGoodsCategoryByCategoryId(Long categoryId);

    /**
     * 获取商品分类信息树列表
     * @return
     */
    List<GoodsCategory> selectCategoryList();


//    功能：获取所有商品分类及其对应的所有商品信息
//    特点：不带参数，查询所有商家的商品数据
//    使用场景：
//    管理员查看所有商品分类和商品信息
//    小程序端所有用户查看商品（不区分商家）
//    不需要筛选特定商家的场景
    /**
     * 获取商品分类信息树列表
     * @return
     */
    List<CategoryWithProductsDTO> getCategoryWithProducts();



//    功能：根据指定的商家ID获取商品分类及其对应的商品信息
//    特点：
//    带merchantId参数，支持按商家筛选
//    当merchantId为null时，查询所有商家的商品（和第一个方法行为一致）
//    当merchantId有具体值时，只查询该商家的商品
//    使用场景：
//    商家用户查看自己店铺的商品分类和商品信息
//            需要按特定商家筛选数据的场景
//    灵活控制数据访问权限
    /**
     * 获取商品分类及对应商品列表(根据商家ID筛选)
     * @param merchantId 商家ID，如果为null则查询所有商家的商品
     * @return
     */
    List<CategoryWithProductsDTO> getCategoryWithProducts(Long merchantId);


}
